package view;

import java.awt.CardLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import model.ArtikelManager;
import model.Competitie;
import model.Lid;
import model.Rekening;
import model.Team;
import model.Veld;
import model.interfaces.Artikel;
import dao.ConcreteManager;

public class ClientGUI implements Observer {

	private JFrame frame;
	private String ingelogdeGebruiker;
	private JTextField textField;
	private ConcreteManager manager;
	private JTextField naamField;
	private JTextField adresField;
	private JTextField leeftijdField;
	private JPanel wijziglidPanel;
	private JList<String> list;
	private JList<String> rekeningen;
	private JList<String> velden;
	private String oudeNaam;
	private JComboBox<String> comboBox, ledenLijst, veldenLijst;
	private JTextField rekOmschrijving;
	private JTextField rekBedrag;
	private JLabel lblSaldo;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ClientGUI window = new ClientGUI();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public ClientGUI() {
		initialize();
		manager = ConcreteManager.getInstance();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(new CardLayout(0, 0));

		JPanel loginPanel = new JPanel();
		frame.getContentPane().add(loginPanel, "login");
		loginPanel.setLayout(null);

		JLabel lblLoginnaam = new JLabel("Loginnaam:");
		lblLoginnaam.setBounds(160, 87, 100, 14);
		loginPanel.add(lblLoginnaam);

		textField = new JTextField();
		textField.setBounds(160, 112, 100, 20);
		loginPanel.add(textField);
		textField.setColumns(10);

		JButton loginButton = new JButton("Login");
		loginButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String naam = textField.getText();
				if (naam.equalsIgnoreCase("administrator")) {
					// gogo naar admin ding
					CardLayout layout = (CardLayout) frame.getContentPane()
							.getLayout();
					layout.show(frame.getContentPane(), "admin");
				} else {
					for (Lid l : manager.getLedenlijst()) {
						if (naam.equalsIgnoreCase(l.getNaam())) {
							// gogo naar leden ding
							CardLayout layout = (CardLayout) frame
									.getContentPane().getLayout();
							layout.show(frame.getContentPane(), "lid");
							ingelogdeGebruiker = l.getNaam();
							break;
						}
					}
				}
			}
		});
		loginButton.setBounds(160, 143, 100, 23);
		loginPanel.add(loginButton);

		JPanel adminPanel = new JPanel();
		frame.getContentPane().add(adminPanel, "admin");
		adminPanel.setLayout(null);

		JLabel lblAdminPanel = new JLabel("Admin Panel");
		lblAdminPanel.setBounds(193, 11, 90, 14);
		adminPanel.add(lblAdminPanel);

		JButton btnLedenadministratie = new JButton("Ledenadministratie");
		btnLedenadministratie.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				vulLijst();
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "ledenadmin");
			}
		});
		btnLedenadministratie.setBounds(10, 32, 163, 23);
		adminPanel.add(btnLedenadministratie);

		JButton btnLogout = new JButton("Logout");
		btnLogout.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "login");
			}
		});
		btnLogout.setBounds(335, 7, 89, 23);
		adminPanel.add(btnLogout);

		JButton btnFinancin = new JButton("Financi\u00EBn");
		btnFinancin.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "financienPanel");
				updateSaldo();
				vulRekeningenLijst();
			}
		});
		btnFinancin.setBounds(10, 55, 163, 23);
		adminPanel.add(btnFinancin);

		JButton btnClubhuis = new JButton("Clubhuis");
		btnClubhuis.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "clubhuis");
			}
		});
		btnClubhuis.setBounds(10, 79, 163, 23);
		adminPanel.add(btnClubhuis);

		JButton btnVelden = new JButton("Velden");
		btnVelden.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "velden");
				updateVelden();
				subscribeVelden();
				updateLijsten();
			}
		});
		btnVelden.setBounds(10, 103, 163, 23);
		adminPanel.add(btnVelden);

		JButton btnCompetities = new JButton("Competities");
		btnCompetities.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "competities");
			}
		});
		btnCompetities.setBounds(10, 128, 163, 23);
		adminPanel.add(btnCompetities);

		JPanel lidPanel = new JPanel();
		frame.getContentPane().add(lidPanel, "lid");
		lidPanel.setLayout(null);

		JLabel lblLedenPanel = new JLabel("Leden Panel");
		lblLedenPanel.setBounds(193, 11, 78, 14);
		lidPanel.add(lblLedenPanel);

		JButton btnVelden_1 = new JButton("Velden");
		btnVelden_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "lidVeld");
			}
		});
		btnVelden_1.setBounds(10, 30, 89, 23);
		lidPanel.add(btnVelden_1);

		JButton btnClubhuis_1 = new JButton("Clubhuis");
		btnClubhuis_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "lidClubhuis");
			}
		});
		btnClubhuis_1.setBounds(10, 54, 89, 23);
		lidPanel.add(btnClubhuis_1);

		JButton btnCompetitie = new JButton("Competitie");
		btnCompetitie.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "lidCompetitie");
			}
		});
		btnCompetitie.setBounds(10, 79, 89, 23);
		lidPanel.add(btnCompetitie);

		JButton btnLogout_1 = new JButton("Logout");
		btnLogout_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "login");
			}
		});
		btnLogout_1.setBounds(335, 30, 89, 23);
		lidPanel.add(btnLogout_1);

		JPanel ledenadmin = new JPanel();
		frame.getContentPane().add(ledenadmin, "ledenadmin");
		ledenadmin.setLayout(null);

		JLabel lblLedenadministratie = new JLabel("Ledenadministratie");
		lblLedenadministratie.setBounds(168, 11, 134, 14);
		ledenadmin.add(lblLedenadministratie);

		JButton btnLidToevoegen = new JButton("Lid toevoegen");
		btnLidToevoegen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "wijzigLid");
			}
		});
		btnLidToevoegen.setBounds(10, 35, 134, 23);
		ledenadmin.add(btnLidToevoegen);

		JButton btnNewButton = new JButton("Lid verwijderen");
		btnNewButton.setBounds(10, 58, 134, 23);
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.verwijderLid(list.getSelectedValue());
			}
		});
		ledenadmin.add(btnNewButton);

		JButton btnLidWijzigen = new JButton("Lid wijzigen");
		btnLidWijzigen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Lid lid = manager.getLid(list.getSelectedValue());
				oudeNaam = lid.getNaam();
				naamField.setText(lid.getNaam());
				adresField.setText(lid.getAdres());
				leeftijdField.setText("" + lid.getLeeftijd());
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "wijzigLid");
			}
		});
		btnLidWijzigen.setBounds(154, 36, 112, 23);
		ledenadmin.add(btnLidWijzigen);

		list = new JList<String>();
		list.setBounds(10, 87, 378, 165);
		ledenadmin.add(list);

		JButton btnAlleLeden = new JButton("Alle leden");
		btnAlleLeden.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String overzicht = "Alle leden: \n";
				for (Lid l : manager.getLedenlijst()) {
					overzicht += l.toString() + "\n";
				}
				JOptionPane.showMessageDialog(null, overzicht, "Ledenlijst",
						JOptionPane.OK_OPTION);
			}
		});
		btnAlleLeden.setBounds(154, 58, 112, 23);
		ledenadmin.add(btnAlleLeden);

		JButton btnActieveLeden = new JButton("Actieve leden");
		btnActieveLeden.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String overzicht = "Alle leden: \n";
				for (Lid l : manager.getActieveLeden()) {
					overzicht += l.toString() + "\n";
				}
				JOptionPane.showMessageDialog(null, overzicht, "Ledenlijst",
						JOptionPane.OK_OPTION);
			}
		});
		btnActieveLeden.setBounds(276, 36, 112, 23);
		ledenadmin.add(btnActieveLeden);

		JButton btnRustendeLeden = new JButton("Rustende leden");
		btnRustendeLeden.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String overzicht = "Alle leden: \n";
				for (Lid l : manager.getRustendeLeden()) {
					overzicht += l.toString() + "\n";
				}
				JOptionPane.showMessageDialog(null, overzicht, "Ledenlijst",
						JOptionPane.OK_OPTION);
			}
		});
		btnRustendeLeden.setBounds(276, 58, 112, 23);
		ledenadmin.add(btnRustendeLeden);

		JButton btnTerug = new JButton("Terug");
		btnTerug.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "admin");
			}
		});
		btnTerug.setBounds(335, 7, 89, 23);
		ledenadmin.add(btnTerug);

		wijziglidPanel = new JPanel();
		frame.getContentPane().add(wijziglidPanel, "wijzigLid");
		wijziglidPanel.setLayout(null);

		JLabel lblNaam = new JLabel("Naam:");
		lblNaam.setBounds(10, 37, 46, 14);
		wijziglidPanel.add(lblNaam);

		JLabel lblAdres = new JLabel("Adres:");
		lblAdres.setBounds(10, 65, 46, 14);
		wijziglidPanel.add(lblAdres);

		JLabel lblLeeftijd = new JLabel("Leeftijd:");
		lblLeeftijd.setBounds(10, 90, 46, 14);
		wijziglidPanel.add(lblLeeftijd);

		naamField = new JTextField();
		naamField.setBounds(53, 34, 86, 20);
		wijziglidPanel.add(naamField);
		naamField.setColumns(10);

		adresField = new JTextField();
		adresField.setBounds(53, 62, 86, 20);
		wijziglidPanel.add(adresField);
		adresField.setColumns(10);

		leeftijdField = new JTextField();
		leeftijdField.setBounds(53, 87, 86, 20);
		wijziglidPanel.add(leeftijdField);
		leeftijdField.setColumns(10);

		JButton btnOk = new JButton("Toevoegen");
		btnOk.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// waarden inlezen en lid toevoegen / wijzigen
				manager.addLid(naamField.getText(),
						Integer.parseInt(leeftijdField.getText()),
						adresField.getText());
				naamField.setText("");
				adresField.setText("");
				leeftijdField.setText("");
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "admin");
			}
		});
		btnOk.setBounds(50, 146, 89, 23);
		wijziglidPanel.add(btnOk);

		JButton btnWijzigen = new JButton("Wijzigen");
		btnWijzigen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.veranderLid(oudeNaam, naamField.getText(),
						Integer.parseInt(leeftijdField.getText()),
						adresField.getText());
				manager.veranderLidmaatschap(oudeNaam,
						(String) comboBox.getSelectedItem());
				naamField.setText("");
				adresField.setText("");
				leeftijdField.setText("");
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "admin");
			}
		});
		btnWijzigen.setBounds(50, 168, 89, 23);
		wijziglidPanel.add(btnWijzigen);

		comboBox = new JComboBox<String>();
		comboBox.setBounds(100, 118, 86, 20);
		comboBox.addItem("Rustend");
		comboBox.addItem("Kind");
		comboBox.addItem("Volwassene");
		wijziglidPanel.add(comboBox);

		JLabel lblLidmaatschap = new JLabel("Lidmaatschap");
		lblLidmaatschap.setBounds(10, 121, 80, 14);
		wijziglidPanel.add(lblLidmaatschap);

		JButton btnTerug_1 = new JButton("Terug");
		btnTerug_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "admin");
			}
		});
		btnTerug_1.setBounds(335, 11, 89, 23);
		wijziglidPanel.add(btnTerug_1);

		JPanel financienPanel = new JPanel();
		frame.getContentPane().add(financienPanel, "financienPanel");
		financienPanel.setLayout(null);

		rekeningen = new JList<String>();
		rekeningen.setBounds(10, 105, 187, 147);
		financienPanel.add(rekeningen);

		JButton btnNieuweRekening = new JButton("Nieuwe rekening");
		btnNieuweRekening.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				rekOmschrijving.setText("");
				rekBedrag.setText("");
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "nieuwRekening");
			}
		});
		btnNieuweRekening.setBounds(10, 11, 155, 23);
		financienPanel.add(btnNieuweRekening);

		JButton btnRekeningBetalen = new JButton("Rekening betalen");
		btnRekeningBetalen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.betaalRekening(rekeningen.getSelectedValue());
				vulRekeningenLijst();
				updateSaldo();
			}
		});
		btnRekeningBetalen.setBounds(10, 41, 155, 23);
		financienPanel.add(btnRekeningBetalen);

		JLabel lblOpenstaand = new JLabel("Openstaand");
		lblOpenstaand.setBounds(76, 85, 89, 14);
		financienPanel.add(lblOpenstaand);

		JButton btnOverzicht = new JButton("Overzicht");
		btnOverzicht.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null,
						manager.getFinancieelOverzicht(), "Overzicht",
						JOptionPane.OK_OPTION);
			}
		});
		btnOverzicht.setBounds(190, 11, 105, 23);
		financienPanel.add(btnOverzicht);

		lblSaldo = new JLabel("Saldo:");
		lblSaldo.setBounds(207, 205, 217, 34);
		financienPanel.add(lblSaldo);

		JButton btnInContributie = new JButton("In contributie");
		btnInContributie.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.getContributie();
				updateSaldo();
			}
		});
		btnInContributie.setBounds(190, 41, 105, 23);
		financienPanel.add(btnInContributie);

		JButton btnTerug_2 = new JButton("Terug");
		btnTerug_2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "admin");
			}
		});
		btnTerug_2.setBounds(335, 11, 89, 23);
		financienPanel.add(btnTerug_2);

		JPanel nieuwRekeningPanel = new JPanel();
		frame.getContentPane().add(nieuwRekeningPanel, "nieuwRekening");
		nieuwRekeningPanel.setLayout(null);

		JLabel lblOmschrijving = new JLabel("Omschrijving:");
		lblOmschrijving.setBounds(10, 28, 105, 14);
		nieuwRekeningPanel.add(lblOmschrijving);

		JLabel lblBedrag = new JLabel("Bedrag");
		lblBedrag.setBounds(10, 53, 83, 14);
		nieuwRekeningPanel.add(lblBedrag);

		rekOmschrijving = new JTextField();
		rekOmschrijving.setBounds(88, 25, 86, 20);
		nieuwRekeningPanel.add(rekOmschrijving);
		rekOmschrijving.setColumns(10);

		rekBedrag = new JTextField();
		rekBedrag.setBounds(88, 53, 86, 20);
		nieuwRekeningPanel.add(rekBedrag);
		rekBedrag.setColumns(10);

		JButton btnToevoegen = new JButton("Toevoegen");
		btnToevoegen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.addRekening(rekOmschrijving.getText(),
						Double.parseDouble(rekBedrag.getText()));
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "admin");
			}
		});
		btnToevoegen.setBounds(88, 96, 105, 23);
		nieuwRekeningPanel.add(btnToevoegen);

		JButton btnTerug_3 = new JButton("Terug");
		btnTerug_3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "admin");
			}
		});
		btnTerug_3.setBounds(335, 24, 89, 23);
		nieuwRekeningPanel.add(btnTerug_3);

		JPanel clubhuisPanel = new JPanel();
		frame.getContentPane().add(clubhuisPanel, "clubhuis");
		clubhuisPanel.setLayout(null);

		JButton btnNewButton_1 = new JButton("Artikel toevoegen");
		btnNewButton_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JComboBox<String> box = new JComboBox<String>();
				box.addItem("Eten");
				box.addItem("Drinken");
				box.addItem("Racket");
				box.addItem("Ballenset");
				int result = JOptionPane.showConfirmDialog(null, box,
						"Selecteer een artikel", JOptionPane.OK_CANCEL_OPTION);
				if (result == JOptionPane.OK_OPTION) {
					String type = (String) box.getSelectedItem();
					if (type.equalsIgnoreCase("eten")) {
						manager.voegArtikelToe(ArtikelManager.ETEN);
					} else if (type.equalsIgnoreCase("drinken")) {
						manager.voegArtikelToe(ArtikelManager.DRINKEN);
					} else if (type.equalsIgnoreCase("racket")) {
						manager.voegArtikelToe(ArtikelManager.RACKET);
					} else {
						manager.voegArtikelToe(ArtikelManager.BALLENSET);
					}
				}
			}
		});
		btnNewButton_1.setBounds(10, 11, 128, 23);
		clubhuisPanel.add(btnNewButton_1);

		JButton btnPrijsWijzigen = new JButton("Prijs wijzigen");
		btnPrijsWijzigen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JComboBox<String> box = new JComboBox<String>();
				for (Artikel a : manager.getArtikelen()) {
					box.addItem(a.getNaam());
				}
				String result = JOptionPane.showInputDialog(null, box,
						"Selecteer een artikel en vul een bedrag in",
						JOptionPane.OK_OPTION);

				String type = (String) box.getSelectedItem();
				if (type.equalsIgnoreCase("eten")) {
					manager.veranderPrijsVanArtikel(Double.parseDouble(result),
							ArtikelManager.ETEN);
				} else if (type.equalsIgnoreCase("drinken")) {
					manager.veranderPrijsVanArtikel(Double.parseDouble(result),
							ArtikelManager.DRINKEN);
				} else if (type.equalsIgnoreCase("racket")) {
					manager.veranderPrijsVanArtikel(Double.parseDouble(result),
							ArtikelManager.RACKET);
				} else {
					manager.veranderPrijsVanArtikel(Double.parseDouble(result),
							ArtikelManager.BALLENSET);
				}

			}
		});
		btnPrijsWijzigen.setBounds(10, 41, 128, 23);
		clubhuisPanel.add(btnPrijsWijzigen);

		JButton btnArtikelVerwijderen = new JButton("Artikel verwijderen");
		btnArtikelVerwijderen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JComboBox<String> box = new JComboBox<String>();
				for (Artikel a : manager.getArtikelen()) {
					box.addItem(a.getNaam());
				}
				JOptionPane.showConfirmDialog(null, box,
						"Selecteer een artikel", JOptionPane.OK_OPTION);

				String type = (String) box.getSelectedItem();
				if (type.equalsIgnoreCase("eten")) {
					manager.verwijderArtikel(ArtikelManager.ETEN);
				} else if (type.equalsIgnoreCase("drinken")) {
					manager.verwijderArtikel(ArtikelManager.DRINKEN);
				} else if (type.equalsIgnoreCase("racket")) {
					manager.verwijderArtikel(ArtikelManager.RACKET);
				} else {
					manager.verwijderArtikel(ArtikelManager.BALLENSET);
				}
			}
		});
		btnArtikelVerwijderen.setBounds(148, 11, 149, 23);
		clubhuisPanel.add(btnArtikelVerwijderen);

		JButton btnOverzicht_1 = new JButton("Overzicht");
		btnOverzicht_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String overzicht = "Overzicht artikelen: \n";
				for (Artikel a : manager.getArtikelen()) {
					overzicht += a.getNaam() + " " + a.getPrijs() + "\n";
				}
				JOptionPane.showMessageDialog(null, overzicht, "Artikelen",
						JOptionPane.INFORMATION_MESSAGE);
			}
		});
		btnOverzicht_1.setBounds(148, 41, 89, 23);
		clubhuisPanel.add(btnOverzicht_1);

		JButton btnTerug_4 = new JButton("Terug");
		btnTerug_4.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "admin");
			}
		});
		btnTerug_4.setBounds(335, 11, 89, 23);
		clubhuisPanel.add(btnTerug_4);

		JPanel veldPanel = new JPanel();
		frame.getContentPane().add(veldPanel, "velden");
		veldPanel.setLayout(null);

		ledenLijst = new JComboBox<String>();
		ledenLijst.setBounds(10, 11, 118, 20);
		veldPanel.add(ledenLijst);

		veldenLijst = new JComboBox<String>();
		veldenLijst.setBounds(10, 42, 118, 20);
		veldPanel.add(veldenLijst);

		JButton btnReserveer = new JButton("Reserveer");
		btnReserveer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.reserveerVeld(Integer.parseInt((String) veldenLijst
						.getSelectedItem()), (String) ledenLijst
						.getSelectedItem());
			}
		});
		btnReserveer.setBounds(157, 10, 89, 23);
		veldPanel.add(btnReserveer);

		JButton btnMaakVrij = new JButton("Maak vrij");
		btnMaakVrij.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.setVeldVrij(Integer.parseInt((String) veldenLijst
						.getSelectedItem()));
			}
		});
		btnMaakVrij.setBounds(157, 41, 89, 23);
		veldPanel.add(btnMaakVrij);

		JLabel lblVeldoverzicht = new JLabel("Veldoverzicht");
		lblVeldoverzicht.setBounds(10, 107, 298, 28);
		veldPanel.add(lblVeldoverzicht);

		velden = new JList<String>();
		velden.setBounds(10, 138, 335, 114);
		veldPanel.add(velden);

		JButton btnNieuwVeld = new JButton("Nieuw Veld");
		btnNieuwVeld.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.addVeld();
				updateLijsten();
			}
		});
		btnNieuwVeld.setBounds(256, 10, 89, 23);
		veldPanel.add(btnNieuwVeld);

		JButton btnTerug_5 = new JButton("Terug");
		btnTerug_5.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "admin");
			}
		});
		btnTerug_5.setBounds(335, 41, 89, 23);
		veldPanel.add(btnTerug_5);

		JPanel veldPanelLid = new JPanel();
		frame.getContentPane().add(veldPanelLid, "lidVeld");
		veldPanelLid.setLayout(null);

		JButton btnVeldReserveren = new JButton("Veld reserveren");
		btnVeldReserveren.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JComboBox<Integer> box = new JComboBox<Integer>();
				for (Veld v : manager.getOverzichtVanVelden()) {
					if (v.getStatus().equalsIgnoreCase("Vrij")) {
						box.addItem(v.getVeldNr());
					}
				}
				JOptionPane.showConfirmDialog(null, box, "Kies een veld",
						JOptionPane.OK_CANCEL_OPTION);
				manager.reserveerVeld((int) box.getSelectedItem(),
						ingelogdeGebruiker);
			}
		});
		btnVeldReserveren.setBounds(10, 21, 155, 23);
		veldPanelLid.add(btnVeldReserveren);

		JButton btnReserveringOpheffen = new JButton("Reservering opheffen");
		btnReserveringOpheffen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JComboBox<Integer> box = new JComboBox<Integer>();
				for (Veld v : manager.getOverzichtVanVelden()) {
					if (v.getGereserveerdDoor().getNaam()
							.equalsIgnoreCase(ingelogdeGebruiker)) {
						box.addItem(v.getVeldNr());
					}
				}
				JOptionPane.showConfirmDialog(null, box, "Kies een veld",
						JOptionPane.OK_CANCEL_OPTION);
				manager.setVeldVrij((int) box.getSelectedItem());
			}
		});
		btnReserveringOpheffen.setBounds(10, 55, 155, 23);
		veldPanelLid.add(btnReserveringOpheffen);

		JButton btnTerug_7 = new JButton("Terug");
		btnTerug_7.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "lid");
			}
		});
		btnTerug_7.setBounds(335, 11, 89, 23);
		veldPanelLid.add(btnTerug_7);

		JPanel lidClubhuis = new JPanel();
		frame.getContentPane().add(lidClubhuis, "lidClubhuis");
		lidClubhuis.setLayout(null);

		JButton btnKoopArtikel = new JButton("Koop artikel");
		btnKoopArtikel.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JComboBox<String> box = new JComboBox<String>();
				for (Artikel a : manager.getArtikelen()) {
					box.addItem(a.getNaam());
				}
				JOptionPane.showMessageDialog(null, box, "Selecteer artikel",
						JOptionPane.OK_OPTION);
				String type = (String) box.getSelectedItem();
				if (type.equalsIgnoreCase("eten")) {
					manager.koopArtikel(ingelogdeGebruiker, ArtikelManager.ETEN);
				} else if (type.equalsIgnoreCase("drinken")) {
					manager.koopArtikel(ingelogdeGebruiker,
							ArtikelManager.DRINKEN);
				} else if (type.equalsIgnoreCase("racket")) {
					manager.koopArtikel(ingelogdeGebruiker,
							ArtikelManager.RACKET);
				} else {
					manager.koopArtikel(ingelogdeGebruiker,
							ArtikelManager.BALLENSET);
				}
			}

		});
		btnKoopArtikel.setBounds(10, 11, 89, 23);
		lidClubhuis.add(btnKoopArtikel);

		JButton btnAankopen = new JButton("Aankopen");
		btnAankopen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null,
						manager.getAankoopGeschiedenis(ingelogdeGebruiker),
						"Aankopen", JOptionPane.INFORMATION_MESSAGE);
				manager.getAankoopGeschiedenis(ingelogdeGebruiker);
			}
		});
		btnAankopen.setBounds(10, 45, 89, 23);
		lidClubhuis.add(btnAankopen);

		JButton btnUitschrijven = new JButton("Uitschrijven");
		btnUitschrijven.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.meldLidAf(ingelogdeGebruiker);
			}
		});
		btnUitschrijven.setBounds(10, 78, 89, 23);
		lidClubhuis.add(btnUitschrijven);

		JButton btnTerug_8 = new JButton("Terug");
		btnTerug_8.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "lid");
			}
		});
		btnTerug_8.setBounds(335, 11, 89, 23);
		lidClubhuis.add(btnTerug_8);

		JPanel competitiePanel = new JPanel();
		frame.getContentPane().add(competitiePanel, "competities");
		competitiePanel.setLayout(null);

		JButton btnCompetitieToevoegen = new JButton("Competitie toevoegen");
		btnCompetitieToevoegen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String naam = JOptionPane.showInputDialog(null,
						"Vul een naam in", "Toevoegen", JOptionPane.OK_OPTION);
				manager.addNieuweCompetitie(naam);
			}
		});
		btnCompetitieToevoegen.setBounds(10, 11, 158, 23);
		competitiePanel.add(btnCompetitieToevoegen);

		JButton btnTeamMaken = new JButton("Team maken");
		btnTeamMaken.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String naam = JOptionPane.showInputDialog(null,
						"Vul een naam in", "Toevoegen", JOptionPane.OK_OPTION);
				manager.addNieuwTeam(naam);
			}
		});
		btnTeamMaken.setBounds(10, 36, 158, 23);
		competitiePanel.add(btnTeamMaken);

		JButton btnTeamToevoegen = new JButton("Team toevoegen");
		btnTeamToevoegen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JComboBox<String> box = new JComboBox<String>();
				for (Team t : manager.getTeams()) {
					box.addItem(t.getTeamNaam());
				}
				JComboBox<String> box2 = new JComboBox<String>();
				for (Competitie c : manager.getCompetities()) {
					box.addItem(c.getCompetitieNaam());
				}
				manager.addTeamAanCompetitie((String) box.getSelectedItem(),
						(String) box2.getSelectedItem());
			}
		});
		btnTeamToevoegen.setBounds(10, 62, 158, 23);
		competitiePanel.add(btnTeamToevoegen);

		JButton btnTeamVerwijderen = new JButton("Team Verwijderen");
		btnTeamVerwijderen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.verwijderTeamUitCompetitie("test", "test");
			}
		});
		btnTeamVerwijderen.setBounds(10, 90, 158, 23);
		competitiePanel.add(btnTeamVerwijderen);

		JButton btnWijzigTeam = new JButton("Wijzig team");
		btnWijzigTeam.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.verwijderLidUitTeam("test", "test");
			}
		});
		btnWijzigTeam.setBounds(10, 116, 158, 23);
		competitiePanel.add(btnWijzigTeam);

		JButton btnTeamAanWedstrijd = new JButton("Team aan wedstrijd");
		btnTeamAanWedstrijd.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.AddTeamAanWedstrijd("test", 0);
			}
		});
		btnTeamAanWedstrijd.setBounds(10, 140, 158, 23);
		competitiePanel.add(btnTeamAanWedstrijd);

		JButton btnUitslagToevoegen = new JButton("Uitslag toevoegen");
		btnUitslagToevoegen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.addUitslagAanWedstrijd(0, 0, 0);
			}
		});
		btnUitslagToevoegen.setBounds(10, 165, 158, 23);
		competitiePanel.add(btnUitslagToevoegen);

		JButton btnTerug_6 = new JButton("Terug");
		btnTerug_6.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "admin");
			}
		});
		btnTerug_6.setBounds(335, 11, 89, 23);
		competitiePanel.add(btnTerug_6);

		JPanel lidCompetitie = new JPanel();
		frame.getContentPane().add(lidCompetitie, "lidCompetitie");
		lidCompetitie.setLayout(null);

		JButton btnTeamMaken_1 = new JButton("Team maken");
		btnTeamMaken_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.addNieuwTeam("test");
			}
		});
		btnTeamMaken_1.setBounds(10, 11, 127, 23);
		lidCompetitie.add(btnTeamMaken_1);

		JButton btnAanmeldenCompetitie = new JButton("Aanmelden competitie");
		btnAanmeldenCompetitie.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.addTeamAanCompetitie("test", "test");
			}
		});
		btnAanmeldenCompetitie.setBounds(10, 45, 205, 23);
		lidCompetitie.add(btnAanmeldenCompetitie);

		JButton btnCompetitiestand = new JButton("Competitiestand");
		btnCompetitiestand.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.getStandVanCompetitie("test");
			}
		});
		btnCompetitiestand.setBounds(10, 79, 127, 23);
		lidCompetitie.add(btnCompetitiestand);

		JButton btnSpeelgeschiedenis = new JButton("Speelgeschiedenis");
		btnSpeelgeschiedenis.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.getWedstrijdGeschiedenis(ingelogdeGebruiker);
			}
		});
		btnSpeelgeschiedenis.setBounds(10, 113, 127, 23);
		lidCompetitie.add(btnSpeelgeschiedenis);

		JButton btnHuidigeWeek = new JButton("Huidige week");
		btnHuidigeWeek.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.getWedstrijdOverzichtVanHuidigeWeek();
			}
		});
		btnHuidigeWeek.setBounds(10, 147, 127, 23);
		lidCompetitie.add(btnHuidigeWeek);

		JButton btnVolgendeWeek = new JButton("Volgende week");
		btnVolgendeWeek.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				manager.getWedstrijdOverzichtVanVolgendeWeek();
			}
		});
		btnVolgendeWeek.setBounds(10, 181, 127, 23);
		lidCompetitie.add(btnVolgendeWeek);

		JButton btnTerug_9 = new JButton("Terug");
		btnTerug_9.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) frame.getContentPane()
						.getLayout();
				layout.show(frame.getContentPane(), "lid");
			}
		});
		btnTerug_9.setBounds(335, 11, 89, 23);
		lidCompetitie.add(btnTerug_9);
	}

	public void vulLijst() {
		DefaultListModel<String> listModel = new DefaultListModel<String>();
		for (Lid l : manager.getLedenlijst()) {
			listModel.addElement(l.getNaam());
		}
		list.setModel(listModel);
		list.setSelectedIndex(0);
	}

	public void vulRekeningenLijst() {
		DefaultListModel<String> listModel = new DefaultListModel<String>();
		for (Rekening r : manager.getOpenstaandeRekeningen()) {
			listModel.addElement(r.getOmschrijving());
		}
		rekeningen.setModel(listModel);
		rekeningen.setSelectedIndex(0);
	}

	public void updateSaldo() {
		lblSaldo.setText("Saldo: " + manager.getSaldo());
	}

	public void updateVelden() {
		DefaultListModel<String> listModel = new DefaultListModel<String>();
		for (Veld v : manager.getOverzichtVanVelden()) {
			listModel.addElement(v.toString());
		}
		velden.setModel(listModel);
		velden.setSelectedIndex(0);
	}

	public void updateLijsten() {
		ledenLijst.removeAllItems();
		veldenLijst.removeAllItems();
		for (Lid l : manager.getActieveLeden()) {
			ledenLijst.addItem(l.getNaam());
		}
		for (Veld v : manager.getOverzichtVanVelden()) {
			veldenLijst.addItem("" + v.getVeldNr());
		}
	}

	@Override
	public void update(Observable arg0, Object arg1) {
		updateVelden();
	}

	private void subscribeVelden() {
		// TODO Auto-generated method stub
		for (Veld v : manager.getOverzichtVanVelden()) {
			v.addObserver(this);
		}
	}
}
